// SPDX-FileCopyrightText: 2023-2025 Sangfor Technologies Inc.
// SPDX-License-Identifier: Mulan PSL v2
package com.geniusai.aip.auth.service;

import com.geniusai.aip.auth.domain.TotalResource;
import com.geniusai.aip.auth.domain.VGpuAllocateVO;

import java.util.List;
import java.util.Map;

/**
 * @author hml14563
 * @date 2021/5/6
 */
public interface MetricService {
    /**
     * 获取当前用户使用的cpu,memory
     *
     * @param namespace 用户的名称
     * @return Map<String,Double> 以资源名称为键的map
     */
    Map<String, Double> getUsedResourceByNamespace(String namespace);

    /**
     * 获取当前用户分配的cpu,memory
     *
     * @param namespace 用户的名称
     * @return Map<String,Double> 以资源名称为键的map
     */
    Map<String, Double> getRequestResourceByNamespace(String namespace);

    /**
     * 获取当前使用和总共的cpu,memory
     * 
     * @return Map<String,Double> 以资源名称为键的map
     */
    Map<String, Double> getTotalResource();

    /**
     * 获取当前分配的cpu,memory,gpu
     * 
     * @return Map<String,Double> 以资源名称为键的map
     */
    Map<String, Double> getRequestTotalResource();

    /**
     * 获取当前用户使用的cpu数目
     * 
     * @param namespace 用户的名称
     * @return cpu Num
     */
    Double getCpuByNamespace(String namespace);

    /**
     * 获取当前用户已分配的cpu资源
     * 
     * @param namespace 用户的名称
     * @return cpu Num
     */
    Double getRequestCpuByNamespace(String namespace);

    /**
     * 获取当前用户使用的Gpu数目
     * 
     * @param namespace 用户的名称
     * @return gpu num
     */
    Integer getGpuByNamespace(String namespace);

    /**
     * 获取位于当前用户空间的GPU
     * 
     * @param namespace 用户的名称
     * @return gpum
     */
    Integer getRequestGpuByNamespace(String namespace);

    /**
     * 获取当前用户使用的memory数目
     * 
     * @param namespace 用户的名称
     * @return memory size
     */
    Double getMemoryByNamespace(String namespace);

    /**
     * 获取当前用户分配的内存资源数目
     * 
     * @param namespace 用户的名称
     * @return memory size
     */
    Double getRequestMemoryByNamespace(String namespace);

    /**
     * 获取当前用户使用的storage数目
     * 
     * @param namespace 用户的名称
     * @return storage size
     */
    Double getStorageByNamespace(String namespace);

    /**
     * 获取所有的CPU资源
     * 
     * @return cpu amount
     */
    Double getTotalCpu();

    /**
     * 获取当前的CPU资源
     * 
     * @return cpu amount
     */
    Double getTotalUsedCpu();

    /**
     * 获取当前分配的CPU资源
     * 
     * @return cpu amount
     */
    Double getRequestTotalCpu();

    /**
     * 获取所有的GPU资源
     * 
     * @return Gpu amount
     */
    Integer getTotalGpu();

    /**
     * 获取当前的GPU资源
     * 
     * @return Gpu amount
     */
    Integer getTotalUsedGpu();

    /**
     * 获取所有的memory资源
     * 
     * @return memory amount
     */
    Double getTotalMemory();

    /**
     * 获取当前的Memory资源
     * 
     * @return memory amount
     */
    Double getTotalUsedMemory();

    /**
     * 获取所有分配的内存资源
     * 
     * @return memory amount
     */
    Double getRequestTotalMemory();

    /**
     * 获取所有的storage资源
     * 
     * @return storage amount
     */
    Double getTotalStorage();

    /**
     * 获取当前的Storage资源
     * 
     * @return Storage amount
     */
    Double getTotalUsedStorage();

    /**
     * 获取用户已申请的vGPU资源
     * @param userId
     * @return
     */
    VGpuAllocateVO getUserAllocateVGpu(String userId);

    /**
     * 查询系统vGpuMemory分配情况
     * @return
     */
    List<TotalResource.VGpuGraph> getTotalVGpuMemoryAllocateUsage();

    /**
     * 查询总的已分配vGpuMemory
     * @return
     */
    Integer getAllocatedTotalVGpuMemory();

    /**
     * 查询用户已分配的
     * @return
     */
    Integer getAllocatedStorageByUserId(String userId);

}
